#pragma once
#include <map>
#include <string>
#include <stdio.h>
using namespace std;
class param
{
private:
    map<string, double> Params;
    string name;

public:
    void set_name(string name)
    {
        this->name = name;
    }
    param(){}
    double &operator[](string key) // 右值系统
    {
        auto it = Params.find(key);
        if (it == Params.end()) // 没找到
        {
            printf("Key [%s] in Params list [%s] not found.\n", key.c_str(), name.c_str());
            exit(-1);
        }
        else
            return it->second;
    }
    double &operator()(string key) // 左值系统
    {
        return Params[key];// 传出的是这个key对应值的引用，这意味着
        // 如果key存在，则直接修改这个key对应的值，
        // 如果key不存在，则先创建一个空值，再修改为其他值
    }
    void clear()
    {
        Params.clear();
    }
    double size()
    {
        return Params.size();
    }
};